<?php
/**
 * @Author: anchen
 * @Date:   2017-04-18 21:22:17
 * @Last Modified by:   anchen
 * @Last Modified time: 2017-04-18 22:37:43
 */
class Response{
    const JSON = 'json';
    /**
     *  按综合方式输出数据
     *  @param int $code 状态码
     *  @param string $message 提示信息
     *  @param array $data 数据
     *  @param string $type 数据类型
     *  @return string
     */
    public static function show($code,$message='',$data=array(),$type=self::JSON){
        if(!is_numeric($code)){
            return '';
        }

        $type = $_GET['format'] ? $_GET['format'] : self::JSON;

        $result = array(
            'code' => $code,
            'message' => $message,
            'data' => $data,
        );
        if($type == 'json'){
            self::json($code,$message,$data);
            exit;
        }elseif($type == 'array'){
            var_dump($result);
        }elseif($type == 'xml'){
            self::xmlEncode($code,$message,$data);
            exit;
        }else{
            // 其他方法
        }
    }
    /**
     *  按json方式输出数据
     *  @param int $code 状态码
     *  @param string $message 提示信息
     *  @param array $data 数据
     *  @return string
     */
    public static function json($code,$message='',$data=array()){
        if(!is_numeric($code)){
            return '';
        }

        $result = array(
            'code' => $code,
            'message' => $message,
            'data' => $data,
        );

        echo json_encode($result);
    }

    /**
     * 按xml方式输出数据
     * @param int $code 状态码
     * @param string $message 提示信息
     * @param array $data 数据
     * @return string
     */
    public static function xmlEncode($code,$message='',$data=array()){
        if(!is_numeric($code)){
            return '';
        }

        $result = array(
            'code' => $code,
            'message' => $message,
            'data' => $data,
        );

        header('Content-Type:text/xml');
        $xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
        $xml .= "<root>\n";
        $xml .= self::xmlToEncode($result);
        $xml .= "</root>";

        echo $xml;
    }

    public static function xmlToEncode($data){
        $xml = $attr = "";
        foreach($data as $key => $value){
            if(is_numeric($key)){
                $attr = " id = '{$key}'";
                $key = "item";
            }
            $xml .= "<{$key}{$attr}>";
            $xml .= is_array($value) ? self::xmlToEncode($value) : $value;
            $xml .= "</{$key}>\n";
        }
        return $xml;
    }
}

$data = array(
    'id' => 1,
    'name' => 'liupeng',
    'age' => 26,
    'type' => array(
        1,2,3,4
    ),
    'test' => array(
        34,44,56 => array(
            'jdkfj',
            234,
        ),
    ),
);

// Response::json(200,'success',$arr);
// Response::xmlEncode(200,'success',$data);
Response::show(200,'success',$data,'array');